Laravel 讓實作認證變得非常簡單。事實上,幾乎所有東西都是可以藉由設定來直接使用。認證設定檔被放在 config/auth.php,其中包含了幾個有良好文件的選項,以此來調整認證服務的行為。
在 Laravel 的核心中,身份驗證工具是由「守衛」和「提供者」所組成。守衛定義了在每個請求中,如何與使用者進行身份驗證。舉例來說,Laravel 內建的一個 session 守衛會使用 session 儲存器和 cookies 來維護驗證狀態。然後另一個 token 守衛會使用每個請求所傳遞的「API token」來認證使用者。
提供者定義了如何從你的永久性儲存區取得使用者資料。Laravel 內建支援使用 Eloquent 和資料庫查詢產生器來取得使用者資料。然而,你可以自由地根據你的應用程式需要來定義額外的提供者。
在每個專案建立之初,裡面會有User相關的資料,這邊就是使用Eoquent認證驅動的。
php artisan make:auth
上面的指令會建立預設的註冊與登入的認證檔案,連view也都建立好了,就不用在自己手刻畫面了,在controller的部分,會產生一個HomeController,所有處理登入的控制都在這邊,也可以自己手動更改裡面的控制器或是使用預設的。
視圖的部分,認證相關的視圖會在resources/views/auth這隻檔案中,resources/views/layouts,相關的版面設定都在layouts裡面了。
$user = Auth::user();
透過Auth可以取得已過認證的使用者,或是另一種方法也可以,下面的方法,如果是登入的使用者,會回傳true不是的話就是false。
也可以使用中介層幫我們先驗證是否為登入的使用者。
if (Auth::check()) {
// 這個使用者已經登入...
}
// 使用路由閉包...
Route::get('profile', ['middleware' => 'auth', function() {
// 只有認證過的使用者能進來這裡...
}]);
// 使用控制器...
Route::get('profile', [
'middleware' => 'auth',
'uses' => 'ProfileController@show'
]);
上面都是用預設的方法,也可以使用自己的驗證方法如下
attempt 方法的第一個參數接受一個鍵值對陣列,在這個陣列的值會用來找尋資料庫裡的使用者資料,所以在上面的範例中,使用者會藉由 email 欄位取得,如果使用者被找到了,資料庫裡經過雜湊的密碼將會與陣列中雜湊的 password 值做比對,如果兩個雜湊密碼相符的話,會開啟一個通過認證的 session 給使用者。
如果認證成功,attempt 方法將會回傳 true,反之則為 false。
<?php
namespace App\Http\Controllers;
use Auth;
use Illuminate\Routing\Controller;
class AuthController extends Controller
{
/**
* Handle an authentication attempt.
*
* @return Response
*/
public function authenticate()
{
if (Auth::attempt(['email' => $email, 'password' => $password])) {
// 認證通過...
return redirect()->intended('dashboard');
}
}
}